7 数据汇总技术
数据聚合处理是任何数据分析工具中都有的功能,在Excel中有提供合并计算、分类汇总、数据透视表的功能,以及使用Excel工作表的统计函数来完成,本节主要学习Pandas中的分组与数据透视两个功能。
7.1 分组原理及处理
分组是将数据按某种特定的方式进行拆分,再对拆分出来的每组数据处理,可以做聚合、转换、过江等用户希望的操作,可以对Series和DateFrame这两种数据分组,操作方式也类基本类似,这里就以讲解DateFrame为例,对应的是df.groupby()函数,结构如下:
df.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,observe=False,dropna=True)
by:分组依据,数据形式可以是映射、函数、标签或者标签列表
axis:分组方向,0或index表示在行方向分组,1 或columns表示在列方向分组,默认为0
level:如果DateFrame表是分层索引,则按一个或多个特定层级分组
as_index:对于聚合输出,返回以组标签,作为索引的对象,仅与DateFrame输入相关。因为_index=False 实际上是SQL风格的分组输出
sort:对组键排序,关闭此选项可获得更好的性能。注意,这并不影响各组内观察的顺序,Groupby保留每个组中行的顺序
group_keys:调用apply时,将组键添加到索引以标识片段
observed:布尔型,只适用于任何分类分组,如果为True,则只会显示分组的观测值
dropna:如果为True,并且组健包含NA值,则将删除NA值以及行/列,如果为False,则NA值也将视为组中的键
上面的分组可以在行或列的方向完成,但在行方向的分组比较常见,所以后续所做演示基本是关于行方向的分组。
import pandas as pd
df=pd.read_excel(r" D:\Pyobject2023\object\测试\素材\1.7.01 分组原理及处理.xlsx" )
print (df)
for data in df.groupby(by= "部门" ):
print (data)
print ("------------------------------------------")
返回:
公司 | 部门 | 姓名 | 工资 | |
---|---|---|---|---|
0 | A公司 | 销售部 | 张三 | 8567 |
1 | A公司 | 销售部 | 李四 | 8564 |
2 | A公司 | 财务部 | 许麻子 | 4563 |
3 | B公司 | 开发部 | 郭麻子 | 3623 |
4 | B公司 | 销售部 | 杨流子 | 5890 |
5 | B公司 | 开发部 | 小曾 | 3264 |
('开发部', | 公司 | 部门 | 姓名 | 工资 |
3 | B公司 | 开发部 | 郭麻子 | 3623 |
5 | B公司 | 开发部 | 小曾 | 3264) |
------------------------------------------
('财务部', | 公司 | 部门 | 姓名 | 工资 |
2 | A公司 | 财务部 | 许麻子 | 4563) |
------------------------------------------
('销售部', | 公司 | 部门 | 姓名 | 工资 |
0 | A公司 | 销售部 | 张三 | 8567 |
1 | A公司 | 销售部 | 李四 | 8564 |
4 | B公司 | 销售部 | 杨流子 | 5890) |
------------------------------------------
import pandas as pd
df=pd.read_excel(r"D:\Pyobject2023\object\测试\素材\1.7.01 分组原理及处理.xlsx")
for data in df.groupby(by="公司"):
print (data)
print ("------------------------------------------")
返回:
('A公司', | 公司 | 部门 | 姓名 | 工资 |
0 | A公司 | 销售部 | 张三 | 8567 |
1 | A公司 | 销售部 | 李四 | 8564 |
2 | A公司 | 财务部 | 许麻子 | 4563) |
------------------------------------------
('B公司', | 公司 | 部门 | 姓名 | 工资 |
3 | B公司 | 开发部 | 郭麻子 | 3623 |
4 | B公司 | 销售部 | 杨流子 | 5890 |
5 | B公司 | 开发部 | 小曾 | 3264) |
------------------------------------------